
import axios from 'axios'

import {tansParams} from "@/utils/util";
// 默认错误码
import errorCode from './errorCode'

// 接口请正常code值
let rightCode = 200;

// 服务端接收数据方式：默认为表单
axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8'

// 创建axios实例
const service = axios.create({
  // axios中请求配置有baseURL选项，表示请求URL公共部分(如果项目的基地址比较统一 使用此种方式可以 但是多基地址情况 就不适应了)
  // 超时
  timeout: 50000,
  withCredentials:true,
})

// 请求拦截器 对请求前的工作做处理
service.interceptors.request.use(config => {
  console.log('请求拦截器', config)
  if (config.method === 'get' && config.params) {
    let url = config.url + '?' + tansParams(config.params);
    url = url.slice(0, -1);
    config.params = {};
    config.url = url;
  }
  return config
})

// 请求响应器 对请求结果进行处理
service.interceptors.response.use(res => {
  console.log('请求响应拦截器', res)
  // 未设置状态码则默认成功状态
  let code = res.data.code || 200;
  if (res.data && res.data.state  && res.data.state == 'success') {
    code = 200;
  }

  // 获取错误信息
  const msg = errorCode[code] || res.data.msg || res.data.message || errorCode['default'];
  // 二进制数据则直接返回(文件下载)
  if(res.request.responseType ===  'blob' || res.request.responseType ===  'arraybuffer') {
    return res.data;
  }

  // code非0即为不成功
  if ((code > 0 && code != 200) || code != rightCode) {
    return Promise.reject({ code, msg })
  }

  // code为0成功
  return res.data
}, error => {
  // 请求异常处理
  return Promise.reject(error)
})

export default service
